home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib13.dsk / SPACE ROVER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  9KB  |  217 lines

  1. 10  REM  **********************
  2. 11  REM  *    SPACE ROVER     *
  3. 12  REM  * BY STEVE PRESCOTT  *
  4. 13  REM  * COPYRIGHT (C) 1983 *
  5. 14  REM  * BY MICROSPARC, INC *
  6. 15  REM  * LINCOLN, MA. 01773 *
  7. 16  REM  **********************
  8. 70  LOMEM: 24629
  9. 80  TEXT : SPEED= 255: HOME : VTAB 12: HTAB 14: FLASH : PRINT "SPACE ROVER": NORMAL 
  10. 90  REM  POKE IN 'WRAP AROUND'
  11. 100  DATA  169,49,133,29,198,29,198,29,164,29,185,72,80
  12. 110  DATA  133,26,136,185,72,80,133,30,162,8,134,28
  13. 120  DATA  198,28,166,28,189,120,80,24,101,30,133
  14. 130  DATA  27,160,0,177,26,72,160,1,177,26,136,145
  15. 140  DATA  26,200,200,192,40,208,245,104,160,39,145
  16. 150  DATA  26,165,28,208,217,164,29,136,208,191,76
  17. 160  DATA  0,80,35,208,35,80,34,208,34,80,33,208
  18. 170  DATA  33,80,32,208,32,80,35,168,35,40,34,168,34
  19. 180  DATA  40,33,168,33,40,32,168,32,40,35,128,35
  20. 190  DATA  0,34,128,34,0,33,128,33,0,32,128,32,0,0
  21. 200  DATA  4,8,12,16,20,24,28,255
  22. 210  FOR J = 0 TO 127
  23. 220  READ K: POKE 20480 +J,K
  24. 230  NEXT J
  25. 240  REM  END OF POKING IN 'WRAP AROUND'
  26. 290  DATA  1,0,4,0,46,46,46,46,45,37,44,36,37,37,37
  27. 300  DATA  45,53,53,53,53,46,54,45,45,44,44,44,148
  28. 310  DATA  210,219,51,46,46,54,29,199,24,24,8,1,24
  29. 320  DATA  63,63,63,63,63,63,63,54,55,55,126,5,0
  30. 330  FOR J =  -1 TO 52
  31. 340  READ K
  32. 350  POKE 6 *4096 +J,K
  33. 360  NEXT J
  34. 370  POKE 232,0: POKE 233,96: REM  LOCATION OF SHAPE TABLE - $6000
  35. 390  REM  END OF POKING IN SHAPE TABLE
  36. 420  DEF  FN R(N) =  INT( RND(1) *N) +1: REM  RETURN A RANDOM NUMBER FROM 1 TO X
  37. 430  DIM LND(279),RNK$(7)
  38. 435  FOR J = 0 TO 7: READ RNK$(J): NEXT 
  39. 440  TEXT 
  40. 450  GOSUB 2500
  41. 455  IF LEVEL = 1  THEN  GOSUB 2000
  42. 458 ST = 0:AL = 1
  43. 459 PLIM = 100:PASS = 0: IF LEVEL >2  THEN PLIM =  INT(21/LEVEL)
  44. 460  POKE 20481,27
  45. 470  POKE 20549,96: REM  INSERT "RTS"
  46. 480 MDPT = 151:LEVEL =  INT(LEVEL)
  47. 490  HGR : POKE  -16302,0: REM  FULL SCREEN GRAPHICS
  48. 500  HCOLOR= 3
  49. 510 SIGN = 1
  50. 520 HGT = MDPT: HPLOT 0,0 TO 0,HGT:LND(0) = HGT
  51. 530 CH = 3:LIMIT = 116
  52. 540  FOR J = 1 TO 100
  53. 550  IF  FN R(4) < >1  THEN 580
  54. 560 SIGN =  FN R(2): IF SIGN = 2  THEN SIGN =  -1
  55. 570 CH = SIGN * FN R(3)
  56. 580 HGT = HGT +CH
  57. 590  IF HGT <LIMIT  THEN HGT = LIMIT
  58. 600  IF HGT >191  THEN HGT = 191
  59. 610  HPLOT J,0 TO J,HGT
  60. 620 LND(J) = HGT
  61. 630  NEXT J
  62. 640 LAST = HGT:LIMIT = 87
  63. 650 K = 6
  64. 660  FOR J = 101 TO 106
  65. 670 LND(J) = LAST -(LAST -87)/K: HPLOT J,0 TO J,LND(J)
  66. 680 K = K -1: NEXT J
  67. 690  IF LEVEL >2  THEN 790
  68. 700 SPAN = 4/LEVEL *21
  69. 710  FOR J = 106 TO 106 +SPAN
  70. 720 LND(J) = 87: HPLOT J,0 TO J,LND(J)
  71. 730  NEXT J
  72. 740 K = 2
  73. 750  FOR J = 106 +SPAN TO 111 +SPAN
  74. 760 LND(J) = LAST -(LAST -87)/K: HPLOT J,0 TO J,LND(J)
  75. 770 K = K +1: NEXT J
  76. 780  GOTO 1010
  77. 790  REM  FORM A CREVICE
  78. 800  IF LEVEL = 3  THEN SPAN = 29:CREVICE = 6
  79. 810  IF LEVEL = 4  THEN SPAN = 19:CREVICE = 8
  80. 820  IF LEVEL = 5  THEN SPAN = 9:CREVICE = 10
  81. 830  IF LEVEL = 6  THEN SPAN = 3:CREVICE = 16
  82. 840  IF LEVEL = 7  THEN SPAN = 1:CREVICE = 17
  83. 850  FOR J = 106 TO 106 +SPAN
  84. 860 LND(J) = 87: HPLOT J,0 TO J,LND(J)
  85. 870  NEXT J
  86. 880 K = 1
  87. 890  FOR J = 106 +SPAN TO 106 +SPAN + INT(CREVICE/2)
  88. 900 LND(J) = LIMIT +K: HPLOT J,0 TO J,LND(J):K = K +1
  89. 910  NEXT J:K = K -2
  90. 920  FOR J = 107 +SPAN + INT(CREVICE/2) TO 106 +SPAN +CREVICE
  91. 930 LND(J) = LIMIT +K: HPLOT J,0 TO J,LND(J):K = K -1
  92. 940  NEXT J
  93. 950  IF LEVEL = 7  THEN SUB = 1: GOTO 970
  94. 960 SUB = 0
  95. 970  FOR J = 107 +SPAN +CREVICE TO 106 +2 *SPAN +CREVICE -SUB
  96. 980 LND(J) = 87: HPLOT J,0 TO J,LND(J)
  97. 990  NEXT J
  98. 1000 SPAN = 1 +2 *SPAN +CREVICE: GOTO 740
  99. 1010 LIMIT = 101
  100. 1020 HGT = LAST
  101. 1030 CH = 3:LIMIT = 116
  102. 1040  FOR J = 111 +SPAN TO 274
  103. 1050  IF  FN R(4) < >1  THEN 1080
  104. 1060 SIGN =  FN R(2): IF SIGN = 2  THEN SIGN =  -1
  105. 1070 CH = SIGN * FN R(3)
  106. 1080 HGT = HGT +CH
  107. 1090  IF HGT <LIMIT  THEN HGT = LIMIT
  108. 1100  IF HGT >191  THEN HGT = 191
  109. 1110  HPLOT J,0 TO J,HGT
  110. 1120 LND(J) = HGT
  111. 1130  NEXT J
  112. 1140 LIM = LIM +4
  113. 1150 LAST = HGT
  114. 1160 DF = MDPT -HGT:K = 5:C = 39
  115. 1170  FOR J = 275 TO 279
  116. 1180 HGT = LAST +DF/K: HPLOT J,0 TO J,HGT
  117. 1190 LND(J) = HGT
  118. 1200 K = K -1
  119. 1210  NEXT J
  120. 1220  REM  FINISHED DRAWING LAND
  121. 1230 LIMIT = 87
  122. 1240  SCALE= 1: ROT= 0:X = 139:C = 1
  123. 1250 XS =  -1:YS = 0: REM  SET INITIAL SPEED
  124. 1260 Y = LIMIT/2: REM  Y-COORDINATE
  125. 1270  HCOLOR= 0: IF XS = 0  AND YS = 0  THEN  DRAW 1 AT X,Y: PRINT "":ST = ST +1: GOTO 1350
  126. 1280 XOLD = X:X = X +XS:YOLD = Y:Y = Y +YS
  127. 1290  IF X <0  THEN X = 280 +X:PASS = PASS +1: IF PASS >PLIM  THEN X = XOLD:Y = YOLD:M$ = "TOO MANY PASSES": GOTO 1490
  128. 1300  IF Y <3  THEN Y = 3:YS = 0
  129. 1310  IF X >279  THEN X = X -280
  130. 1320  IF Y >78  THEN AL = 0: GOTO 1430
  131. 1330  DRAW 1 AT X,Y
  132. 1340  HCOLOR= 3: DRAW 1 AT XOLD,YOLD
  133. 1350  CALL 20480:C = C +1: IF C = 40  THEN C = 0
  134. 1355  IF ST =  INT(21/LEVEL)  THEN M$ = "SHIP NOT MOVING": GOTO 1490
  135. 1360 K =  PEEK( -16384): POKE  -16368,0: IF K >127  THEN 1380
  136. 1370  GOTO 1270
  137. 1380  IF K = 202  THEN XS = XS -1
  138. 1390  IF K = 203  THEN XS = XS +1
  139. 1400  IF K = 201  THEN YS = YS -1
  140. 1410  IF K = 205  THEN YS = YS +1
  141. 1420  GOTO 1270
  142. 1430 PLACE = C *7 +X +3: IF PLACE >279  THEN PLACE = PLACE -280
  143. 1440  CALL 20480: DRAW 1 AT X,Y: HCOLOR= 3: DRAW 1 AT XOLD,YOLD
  144. 1450  IF LND(PLACE) < >LIM  THEN 1490
  145. 1460 PLACE = PLACE +19: IF PLACE >279  THEN PLACE = PLACE -280
  146. 1470  IF LND(PLACE) < >LIM  THEN 1490
  147. 1480  TEXT : HOME : FLASH : VTAB 12: HTAB 9: PRINT "SUCCESSFUL LANDING": NORMAL : FOR P = 1 TO 600: NEXT P: POKE  -16304,0:GOOD = GOOD +1:SUC = 1:M$ = "SOFT LANDING": GOTO 1500
  148. 1490  TEXT : HOME : VTAB 12: HTAB 15: PRINT "C R A S H !!!": FOR P = 1 TO 600: NEXT P: POKE  -16304,0:BAD = BAD +1:SUC = 0: IF AL = 0  THEN M$ = "MISSED!"
  149. 1491  HCOLOR= 3: FOR P = 1 TO 500: NEXT P: DRAW 1 AT X,Y:R = 0
  150. 1494  FOR YN = Y TO 191  STEP 3:R = R +1: ROT= R: XDRAW 1 AT X,YN: IF R < >1  THEN  ROT= R -1: XDRAW 1 AT X,YN -3
  151. 1496  NEXT 
  152. 1500  POKE  -16386,0: GET A$
  153. 1510  TEXT : HOME 
  154. 1520  IF SUC = 1  THEN LEVEL = LEVEL +1:MIS = 0
  155. 1530  IF LEVEL = 8  THEN 1700
  156. 1540  IF SUC = 0  THEN MIS = MIS +1: IF MIS = 2  THEN LEVEL = LEVEL -1:MIS = 0
  157. 1550  IF LEVEL = 0  THEN 1800
  158. 1560  PRINT "RANK AFTER MISSION: ";RNK$(LEVEL)
  159. 1570  PRINT : PRINT "SUCCESSFUL LANDINGS = ";GOOD
  160. 1580  PRINT "CRASHES"; SPC( 13);"= ";BAD
  161. 1581  FLASH 
  162. 1582  VTAB 9: IF SUC = 0  AND MIS = 0  THEN  HTAB 14: PRINT "DEMOTED!!": NORMAL 
  163. 1583  IF SUC = 1  THEN  HTAB 8: PRINT "P R O M O T E D !!!"
  164. 1584  NORMAL 
  165. 1585  VTAB 12: PRINT "LEVELS:": PRINT : FOR J = 1 TO 7: PRINT J;") ";RNK$(J): NEXT 
  166. 1586  VTAB 7: PRINT "REPORT: ";: FLASH : PRINT M$: NORMAL : VTAB 21
  167. 1590  PRINT : PRINT "PRESS A KEY FOR THE NEXT MISSION ";: POKE  -16368,0: GET A$: GOTO 458
  168. 1700  REM  WINNER
  169. 1710  HOME : PRINT "CONGRATULATION!! YOU HAVE SUCCESSFULLY  COMPLETED THE SEVENTH AND MOST DIFFICULTLEVEL OF THE COURSE.": PRINT 
  170. 1720  PRINT "HERE ARE THE STATISTICS OF YOUR TRIALS"
  171. 1730  PRINT : PRINT : PRINT "LANDINGS = ";GOOD
  172. 1740  PRINT "CRASHES = ";BAD
  173. 1750  PRINT : PRINT "TO DESIGN YOUR OWN MODULES, MODIFY LINES790-840."
  174. 1760  END 
  175. 1800  REM  LOSER
  176. 1810  HOME 
  177. 1820  PRINT "YOU HAVE UTTERLY FAILED IN YOUR ATTEMPTSTO LAND THE SHIP!"
  178. 1830  PRINT : PRINT "HERE ARE YOUR STATISTICS": PRINT 
  179. 1840  PRINT "LANDINGS = ";GOOD
  180. 1850  PRINT "CRASHES = ";BAD
  181. 1855  PRINT 
  182. 1860  PRINT "YOU ARE A DISGRACE TO BOTH YOUR FAMILY  AND COUNTRY AND WILL THEREFORE BE SHOT  AT THE CRACK OF DAWN!"
  183. 1870  END 
  184. 2000  REM  INSTRUCTIONS
  185. 2010  HOME 
  186. 2020  VTAB 1: FOR J = 1 TO 40: HTAB J: PRINT "*";: NEXT J
  187. 2030  FOR J = 1 TO 23: HTAB 40: VTAB J: PRINT "*";: NEXT J
  188. 2040  VTAB 22: FOR J = 40 TO 1  STEP  -1: HTAB J: PRINT "*";: NEXT J
  189. 2050  FOR J = 23 TO 1  STEP  -1: HTAB 1: VTAB J: PRINT "*";: NEXT J
  190. 2060  POKE 32,2: POKE 33,37: POKE 34,1: POKE 35,22: SPEED= 200
  191. 2070  VTAB 3: PRINT  TAB( 11);"SPECIAL REPORT": PRINT 
  192. 2080  FOR P = 1 TO 100: NEXT P
  193. 2090  PRINT "DEAR CADET,"
  194. 2100  HTAB 2: PRINT "CONGRATULATIONS! YOU'RE GOING TO "
  195. 2110  PRINT "LEARN HOW TO MANEUVER THE ";: INVERSE : PRINT "SPACE ROVER";: NORMAL 
  196. 2120  PRINT "SPACE SHIP.  THE CONTROLS ARE THE"
  197. 2130  PRINT "'I', 'J', 'K', AND 'M' KEYS WHICH "
  198. 2140  PRINT "MOVE THE SHIP IN THE RESPECTIVE"
  199. 2150  PRINT "DIRECTIONS."
  200. 2160  HTAB 2: PRINT "WITH THESE CONTROLS IT IS YOUR JOB"
  201. 2170  PRINT "TO LAND ON THE MOVING PLATFORM."
  202. 2180  PRINT : PRINT  TAB( 15);"CAUTIONS:"
  203. 2190  PRINT "1) KEEP MOVING AT ALL TIMES"
  204. 2200  PRINT "2) NEVER GO BELOW THE PLATFORM"
  205. 2210  PRINT : PRINT "PRESS A KEY TO BEGIN";: POKE  -16368,0: GET A$
  206. 2215  FOR J = 1 TO 24: PRINT : NEXT : PRINT : VTAB 10: PRINT  TAB( 10);"HERE WE GO!!": FOR P = 1 TO 1000: NEXT 
  207. 2220  SPEED= 255: RETURN 
  208. 2500  HOME : REM  CHOOSE A LEVEL
  209. 2510  PRINT "CHOOSE YOUR STARTING LEVEL..."
  210. 2520  VTAB 22: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC **": VTAB 5
  211. 2530  FOR J = 1 TO 7
  212. 2540  PRINT J;") ";RNK$(J): PRINT 
  213. 2550  NEXT J
  214. 2600  PRINT : INPUT "CHOICE==>";LEVEL
  215. 2610  IF LEVEL <1  OR LEVEL >7  THEN 2500
  216. 2620  RETURN 
  217. 5000  DATA  PRIVATE,PRIVATE SECOND CLASS,CORPORAL,SERGEANT,SECOND LIEUTENANT,FIRST LIEUTENANT,CAPT. ZORRO